// let const/var

// console.log(a)
// var a = 1;

// var 变量提升
// es6 前 全局作用域、函数作用域
// es6块级作用域 {}
// var可以重复声明，let不可以
// const声明常量，如果定义的引用类型，可以根据索引改变
// 总结： 优先const，需要变用let，不用var
// console.log(a)

// function fn() {
//   var a = 1
// }
// fn()
// function fn() {
//   let b = 2;
//   let a = 1
// }
// if (true) {
//   var a = 1;
// }
// console.log(a)
// console.log(a)
// 暂时性死区
// let a = 1;

// for (let i = 0; i < 3; i++) {
//   setTimeout(() => {
//     console.log(i)
//   })
// }
// console.log(i)

// for (let i = 0; i < 3; i++) {
//   for (var i = 0; i < 3; i++) {
//     console.log(i)
//   }
// }

// {
//   let i = 0;
//   if(i < 3) {
//     xxx
//     i++
//   }
// }
// const a = { foo: 'foo' };
// a.foo = 'boo'
// let str = '123'
// console.log(str)

// const arr = [1, 2, 3]
// const [ite1, ite2, ite3 = '4', more = '2'] = arr
// console.log(ite1, ite2, ite3, more)
// const [, , ite3] = arr
// console.log(ite3)
// const [, ...ite] = arr
// console.log(ite)

// const obj = {
//   a: 1,
//   b: 2
// }
// const { a, b: c, d: f = '123' } = obj
// console.log(f)


// 箭头函数
// 写法，return
// 没有arguments
// 没有自己的this,this指向定义时的上下文
// 不能new

// function fn() {
//   console.log(arguments)
// }
// const fn = (...rest) => {
//   console.log(rest)
// }
// console.log(fn(1, 2, 3))

// const obj = {
// name: 'tom',
// getName: function () {
//   console.log(this.name)
// }
// getName: (obj) => {
//   console.log(this)
//   console.log(obj.name)
// }
// }
// obj.getName(obj)

// 类数组转数组的方法
// 1. [...likeArr]
// 2. Array.from()

// let key = "name"
// let key1 = { a: 1 }
// const obj = {
//   a: 1,
//   [key]: "tom",
//   [key1]: 'object'
// }
// const obj = { a: 1, b: 2, c: { d: 1 } }
// console.log(Object.keys(obj))
// console.log(Object.values(obj))
// console.log(Object.entries(obj))

// 浅拷贝
// 1. Object.assign
// 2. [...xxx] , {...}
// 3.  = 

// 深拷贝
// 1.JSON.parse JSON.stringfy
// 2.手写深拷贝的方法
// lodash deepClone(xx)


// const newObj = Object.assign({}, obj)
// const newObj = obj;

// newObj.a = 2;
// console.log(obj)
// console.log(newObj)

// Set Map
// Set
// const aSet = new Set(); // 类似数组
// aSet.add(1).add(2).add(3).add(1)
// console.log([...aSet])
const arr = new Set([1, 3, 4, 5, 2, 3, 6, 5])
console.log(arr)


